home *** CD-ROM | disk | FTP | other *** search
/ ETO Development Tools 1 / ETO Development Tools 1.iso / Essentials / Developer Essentials Jul 90 / Programming / MPW Interfaces & Libraries 3.1 / AIncludes / SANEMacs.a < prev    next >
Encoding:
Text File  |  1989-10-13  |  19.8 KB  |  1,033 lines  |  [TEXT/MPS ]

  1. ; Version: 1.02
  2. ; Created: Tuesday, August 2, 1988 at 9:48:22 PM
  3. ; File: SANEMacs.a
  4. ;
  5. ; Copyright Apple Computer, Inc. 1984, 1985, 1986, 1987
  6. ; All Rights Reserved
  7. ;
  8. ; SANE Numerics -- This file defines the assembly language
  9. ; access to the 68K floating-point arithmetic routines. It is
  10. ; documented in the Apple Numerics Manual.
  11. ;
  12. ;———————————————————————————————————————————————————————————
  13. ; Operation code masks.
  14. ;———————————————————————————————————————————————————————————
  15. FOADD            EQU         $0000                    ; add
  16. FOSUB            EQU         $0002                    ; subtract
  17. FOMUL            EQU         $0004                    ; multiply
  18. FODIV            EQU         $0006                    ; divide
  19. FOCMP            EQU         $0008                    ; compare, no exception from unordered
  20. FOCPX            EQU         $000A                    ; compare, signal invalid if unordered
  21. FOREM            EQU         $000C                    ; remainder
  22. FOZ2X            EQU         $000E                    ; convert to extended
  23. FOX2Z            EQU         $0010                    ; convert from extended
  24. FOSQRT            EQU         $0012                    ; square root
  25. FORTI            EQU         $0014                    ; round to integral value
  26. FOTTI            EQU         $0016                    ; truncate to integral value
  27. FOSCALB         EQU         $0018                    ; binary scale
  28. FOLOGB            EQU         $001A                    ; binary log
  29. FOCLASS         EQU         $001C                    ; classify
  30. ; UNDEFINED EQU $001E
  31.  
  32. FOSETENV        EQU         $0001                    ; set environment
  33. FOGETENV        EQU         $0003                    ; get environment
  34. FOSETHV         EQU         $0005                    ; set halt vector
  35. FOGETHV         EQU         $0007                    ; get halt vector
  36. FOD2B            EQU         $0009                    ; convert decimal to binary
  37. FOB2D            EQU         $000B                    ; convert binary to decimal
  38. FONEG            EQU         $000D                    ; negate
  39. FOABS            EQU         $000F                    ; absolute
  40. FOCPYSGN        EQU         $0011                    ; copy sign
  41. FONEXT            EQU         $0013                    ; next-after
  42. FOSETXCP        EQU         $0015                    ; set exception
  43. FOPROCENTRY     EQU         $0017                    ; procedure entry
  44. FOPROCEXIT        EQU         $0019                    ; procedure exit
  45. FOTESTXCP        EQU         $001B                    ; test exception
  46. ; UNDEFINED EQU $001D
  47. ; UNDEFINED EQU $001F
  48.  
  49.  
  50. ;———————————————————————————————————————————————————————————
  51. ; Operand format masks.
  52. ;———————————————————————————————————————————————————————————
  53. FFEXT            EQU         $0000                    ; extended -- 80-bit float
  54. FFDBL            EQU         $0800                    ; double -- 64-bit float
  55. FFSGL            EQU         $1000                    ; single -- 32-bit float
  56. FFINT            EQU         $2000                    ; integer -- 16-bit integer
  57. FFLNG            EQU         $2800                    ; long int -- 32-bit integer
  58. FFCOMP            EQU         $3000                    ; comp -- 64-bit integer
  59.  
  60. ;———————————————————————————————————————————————————————————
  61. ; Precision code masks: forces a floating point output
  62. ; value to be coerced to the range and precision specified.
  63. ;———————————————————————————————————————————————————————————
  64. FCEXT            EQU         $0000                    ; extended
  65. FCDBL            EQU         $4000                    ; double
  66. FCSGL            EQU         $8000                    ; single
  67.  
  68. ;———————————————————————————————————————————————————————————
  69. ; Operations: operand addresses should already be on
  70. ; the stack, with the destination address on top. The
  71. ; suffix X, D, S, C, I, or L determines the format of the
  72. ; source operand -- extended, double, single, comp,
  73. ; integer, or long integer, respectively; the destination
  74. ; operand is always extended.
  75. ;———————————————————————————————————————————————————————————
  76.  
  77.  
  78. ;———————————————————————————————————————————————————————————
  79. ; Addition.
  80. ;———————————————————————————————————————————————————————————
  81.                 MACRO
  82.                 FADDX
  83.                 MOVE.W        #FFEXT+FOADD,-(SP)
  84.                 _FP68K
  85.                 ENDM
  86.  
  87.                 MACRO
  88.                 FADDD
  89.                 MOVE.W        #FFDBL+FOADD,-(SP)
  90.                 _FP68K
  91.                 ENDM
  92.  
  93.                 MACRO
  94.                 FADDS
  95.                 MOVE.W        #FFSGL+FOADD,-(SP)
  96.                 _FP68K
  97.                 ENDM
  98.  
  99.                 MACRO
  100.                 FADDC
  101.                 MOVE.W        #FFCOMP+FOADD,-(SP)
  102.                 _FP68K
  103.                 ENDM
  104.  
  105.                 MACRO
  106.                 FADDI
  107.                 MOVE.W        #FFINT+FOADD,-(SP)
  108.                 _FP68K
  109.                 ENDM
  110.  
  111.                 MACRO
  112.                 FADDL
  113.                 MOVE.W        #FFLNG+FOADD,-(SP)
  114.                 _FP68K
  115.                 ENDM
  116.  
  117. ;———————————————————————————————————————————————————————————
  118. ; Subtraction.
  119. ;———————————————————————————————————————————————————————————
  120.                 MACRO
  121.                 FSUBX
  122.                 MOVE.W        #FFEXT+FOSUB,-(SP)
  123.                 _FP68K
  124.                 ENDM
  125.  
  126.                 MACRO
  127.                 FSUBD
  128.                 MOVE.W        #FFDBL+FOSUB,-(SP)
  129.                 _FP68K
  130.                 ENDM
  131.  
  132.                 MACRO
  133.                 FSUBS
  134.                 MOVE.W        #FFSGL+FOSUB,-(SP)
  135.                 _FP68K
  136.                 ENDM
  137.  
  138.                 MACRO
  139.                 FSUBC
  140.                 MOVE.W        #FFCOMP+FOSUB,-(SP)
  141.                 _FP68K
  142.                 ENDM
  143.  
  144.                 MACRO
  145.                 FSUBI
  146.                 MOVE.W        #FFINT+FOSUB,-(SP)
  147.                 _FP68K
  148.                 ENDM
  149.  
  150.                 MACRO
  151.                 FSUBL
  152.                 MOVE.W        #FFLNG+FOSUB,-(SP)
  153.                 _FP68K
  154.                 ENDM
  155.  
  156. ;———————————————————————————————————————————————————————————
  157. ; Multiplication.
  158. ;———————————————————————————————————————————————————————————
  159.                 MACRO
  160.                 FMULX
  161.                 MOVE.W        #FFEXT+FOMUL,-(SP)
  162.                 _FP68K
  163.                 ENDM
  164.  
  165.                 MACRO
  166.                 FMULD
  167.                 MOVE.W        #FFDBL+FOMUL,-(SP)
  168.                 _FP68K
  169.                 ENDM
  170.  
  171.                 MACRO
  172.                 FMULS
  173.                 MOVE.W        #FFSGL+FOMUL,-(SP)
  174.                 _FP68K
  175.                 ENDM
  176.  
  177.                 MACRO
  178.                 FMULC
  179.                 MOVE.W        #FFCOMP+FOMUL,-(SP)
  180.                 _FP68K
  181.                 ENDM
  182.  
  183.                 MACRO
  184.                 FMULI
  185.                 MOVE.W        #FFINT+FOMUL,-(SP)
  186.                 _FP68K
  187.                 ENDM
  188.  
  189.                 MACRO
  190.                 FMULL
  191.                 MOVE.W        #FFLNG+FOMUL,-(SP)
  192.                 _FP68K
  193.                 ENDM
  194.  
  195.  
  196. ;———————————————————————————————————————————————————————————
  197. ; Division.
  198. ;———————————————————————————————————————————————————————————
  199.                 MACRO
  200.                 FDIVX
  201.                 MOVE.W        #FFEXT+FODIV,-(SP)
  202.                 _FP68K
  203.                 ENDM
  204.  
  205.                 MACRO
  206.                 FDIVD
  207.                 MOVE.W        #FFDBL+FODIV,-(SP)
  208.                 _FP68K
  209.                 ENDM
  210.  
  211.                 MACRO
  212.                 FDIVS
  213.                 MOVE.W        #FFSGL+FODIV,-(SP)
  214.                 _FP68K
  215.                 ENDM
  216.  
  217.                 MACRO
  218.                 FDIVC
  219.                 MOVE.W        #FFCOMP+FODIV,-(SP)
  220.                 _FP68K
  221.                 ENDM
  222.  
  223.                 MACRO
  224.                 FDIVI
  225.                 MOVE.W        #FFINT+FODIV,-(SP)
  226.                 _FP68K
  227.                 ENDM
  228.  
  229.                 MACRO
  230.                 FDIVL
  231.                 MOVE.W        #FFLNG+FODIV,-(SP)
  232.                 _FP68K
  233.                 ENDM
  234.  
  235. ;———————————————————————————————————————————————————————————
  236. ; Square root.
  237. ;———————————————————————————————————————————————————————————
  238.                 MACRO
  239.                 FSQRTX
  240.                 MOVE.W        #FOSQRT,-(SP)
  241.                 _FP68K
  242.                 ENDM
  243.  
  244. ;———————————————————————————————————————————————————————————
  245. ; Round to integer, according to the current rounding mode.
  246. ;———————————————————————————————————————————————————————————
  247.                 MACRO
  248.                 FRINTX
  249.                 MOVE.W        #FORTI,-(SP)
  250.                 _FP68K
  251.                 ENDM
  252.  
  253. ;———————————————————————————————————————————————————————————
  254. ; Truncate to integer, using round toward zero.
  255. ;———————————————————————————————————————————————————————————
  256.                 MACRO
  257.                 FTINTX
  258.                 MOVE.W        #FOTTI,-(SP)
  259.                 _FP68K
  260.                 ENDM
  261.  
  262. ;———————————————————————————————————————————————————————————
  263. ; Remainder.
  264. ;———————————————————————————————————————————————————————————
  265.                 MACRO
  266.                 FREMX
  267.                 MOVE.W        #FFEXT+FOREM,-(SP)
  268.                 _FP68K
  269.                 ENDM
  270.  
  271.                 MACRO
  272.                 FREMD
  273.                 MOVE.W        #FFDBL+FOREM,-(SP)
  274.                 _FP68K
  275.                 ENDM
  276.  
  277.                 MACRO
  278.                 FREMS
  279.                 MOVE.W        #FFSGL+FOREM,-(SP)
  280.                 _FP68K
  281.                 ENDM
  282.  
  283.                 MACRO
  284.                 FREMC
  285.                 MOVE.W        #FFCOMP+FOREM,-(SP)
  286.                 _FP68K
  287.                 ENDM
  288.  
  289.                 MACRO
  290.                 FREMI
  291.                 MOVE.W        #FFINT+FOREM,-(SP)
  292.                 _FP68K
  293.                 ENDM
  294.  
  295.                 MACRO
  296.                 FREML
  297.                 MOVE.W        #FFLNG+FOREM,-(SP)
  298.                 _FP68K
  299.                 ENDM
  300.  
  301. ;———————————————————————————————————————————————————————————
  302. ; Logb.
  303. ;———————————————————————————————————————————————————————————
  304.                 MACRO
  305.                 FLOGBX
  306.                 MOVE.W        #FOLOGB,-(SP)
  307.                 _FP68K
  308.                 ENDM
  309.  
  310. ;———————————————————————————————————————————————————————————
  311. ; Scalb.
  312. ;———————————————————————————————————————————————————————————
  313.                 MACRO
  314.                 FSCALBX
  315.                 MOVE.W        #FFINT+FOSCALB,-(SP)
  316.                 _FP68K
  317.                 ENDM
  318.  
  319. ;———————————————————————————————————————————————————————————
  320. ; Copy-sign.
  321. ;———————————————————————————————————————————————————————————
  322.                 MACRO
  323.                 FCPYSGNX
  324.                 MOVE.W        #FOCPYSGN,-(SP)
  325.                 _FP68K
  326.                 ENDM
  327.  
  328. ;———————————————————————————————————————————————————————————
  329. ; Negate.
  330. ;———————————————————————————————————————————————————————————
  331.                 MACRO
  332.                 FNEGX
  333.                 MOVE.W        #FONEG,-(SP)
  334.                 _FP68K
  335.                 ENDM
  336.  
  337. ;———————————————————————————————————————————————————————————
  338. ; Absolute value.
  339. ;———————————————————————————————————————————————————————————
  340.                 MACRO
  341.                 FABSX
  342.                 MOVE.W        #FOABS,-(SP)
  343.                 _FP68K
  344.                 ENDM
  345.  
  346. ;———————————————————————————————————————————————————————————
  347. ; Next-after. NOTE: both operands are of the same
  348. ; format, as specified by the usual suffix.
  349. ;———————————————————————————————————————————————————————————
  350.                 MACRO
  351.                 FNEXTS
  352.                 MOVE.W        #FFSGL+FONEXT,-(SP)
  353.                 _FP68K
  354.                 ENDM
  355.  
  356.                 MACRO
  357.                 FNEXTD
  358.                 MOVE.W        #FFDBL+FONEXT,-(SP)
  359.                 _FP68K
  360.                 ENDM
  361.  
  362.                 MACRO
  363.                 FNEXTX
  364.                 MOVE.W        #FFEXT+FONEXT,-(SP)
  365.                 _FP68K
  366.                 ENDM
  367.  
  368. ;———————————————————————————————————————————————————————————
  369. ; Conversion to extended.
  370. ;———————————————————————————————————————————————————————————
  371.                 MACRO
  372.                 FX2X
  373.                 MOVE.W        #FFEXT+FOZ2X,-(SP)
  374.                 _FP68K
  375.                 ENDM
  376.  
  377.                 MACRO
  378.                 FD2X
  379.                 MOVE.W        #FFDBL+FOZ2X,-(SP)
  380.                 _FP68K
  381.                 ENDM
  382.  
  383.                 MACRO
  384.                 FS2X
  385.                 MOVE.W        #FFSGL+FOZ2X,-(SP)
  386.                 _FP68K
  387.                 ENDM
  388.  
  389.                 MACRO
  390.                 FI2X
  391.                 MOVE.W        #FFINT+FOZ2X,-(SP)
  392.                 _FP68K
  393.                 ENDM
  394.  
  395.                 MACRO
  396.                 FL2X
  397.                 MOVE.W        #FFLNG+FOZ2X,-(SP)
  398.                 _FP68K
  399.                 ENDM
  400.  
  401.                 MACRO
  402.                 FC2X
  403.                 MOVE.W        #FFCOMP+FOZ2X,-(SP)
  404.                 _FP68K
  405.                 ENDM
  406.  
  407. ;———————————————————————————————————————————————————————————
  408. ; Conversion from extended.
  409. ;———————————————————————————————————————————————————————————
  410.                 MACRO
  411.                 FX2D
  412.                 MOVE.W        #FFDBL+FOX2Z,-(SP)
  413.                 _FP68K
  414.                 ENDM
  415.  
  416.                 MACRO
  417.                 FX2S
  418.                 MOVE.W        #FFSGL+FOX2Z,-(SP)
  419.                 _FP68K
  420.                 ENDM
  421.  
  422.                 MACRO
  423.                 FX2I
  424.                 MOVE.W        #FFINT+FOX2Z,-(SP)
  425.                 _FP68K
  426.                 ENDM
  427.  
  428.                 MACRO
  429.                 FX2L
  430.                 MOVE.W        #FFLNG+FOX2Z,-(SP)
  431.                 _FP68K
  432.                 ENDM
  433.  
  434.                 MACRO
  435.                 FX2C
  436.                 MOVE.W        #FFCOMP+FOX2Z,-(SP)
  437.                 _FP68K
  438.                 ENDM
  439.  
  440. ;———————————————————————————————————————————————————————————
  441. ; Binary to decimal conversion.
  442. ;———————————————————————————————————————————————————————————
  443.                 MACRO
  444.                 FX2DEC
  445.                 MOVE.W        #FFEXT+FOB2D,-(SP)
  446.                 _FP68K
  447.                 ENDM
  448.  
  449.                 MACRO
  450.                 FD2DEC
  451.                 MOVE.W        #FFDBL+FOB2D,-(SP)
  452.                 _FP68K
  453.                 ENDM
  454.  
  455.                 MACRO
  456.                 FS2DEC
  457.                 MOVE.W        #FFSGL+FOB2D,-(SP)
  458.                 _FP68K
  459.                 ENDM
  460.  
  461.                 MACRO
  462.                 FC2DEC
  463.                 MOVE.W        #FFCOMP+FOB2D,-(SP)
  464.                 _FP68K
  465.                 ENDM
  466.  
  467.                 MACRO
  468.                 FI2DEC
  469.                 MOVE.W        #FFINT+FOB2D,-(SP)
  470.                 _FP68K
  471.                 ENDM
  472.  
  473.                 MACRO
  474.                 FL2DEC
  475.                 MOVE.W        #FFLNG+FOB2D,-(SP)
  476.                 _FP68K
  477.                 ENDM
  478.  
  479. ;———————————————————————————————————————————————————————————
  480. ; Decimal to binary conversion.
  481. ;———————————————————————————————————————————————————————————
  482.                 MACRO
  483.                 FDEC2X
  484.                 MOVE.W        #FFEXT+FOD2B,-(SP)
  485.                 _FP68K
  486.                 ENDM
  487.  
  488.                 MACRO
  489.                 FDEC2D
  490.                 MOVE.W        #FFDBL+FOD2B,-(SP)
  491.                 _FP68K
  492.                 ENDM
  493.  
  494.                 MACRO
  495.                 FDEC2S
  496.                 MOVE.W        #FFSGL+FOD2B,-(SP)
  497.                 _FP68K
  498.                 ENDM
  499.  
  500.                 MACRO
  501.                 FDEC2C
  502.                 MOVE.W        #FFCOMP+FOD2B,-(SP)
  503.                 _FP68K
  504.                 ENDM
  505.  
  506.                 MACRO
  507.                 FDEC2I
  508.                 MOVE.W        #FFINT+FOD2B,-(SP)
  509.                 _FP68K
  510.                 ENDM
  511.  
  512.                 MACRO
  513.                 FDEC2L
  514.                 MOVE.W        #FFLNG+FOD2B,-(SP)
  515.                 _FP68K
  516.                 ENDM
  517.  
  518. ;———————————————————————————————————————————————————————————
  519. ; Compare, not signaling invalid on unordered.
  520. ;———————————————————————————————————————————————————————————
  521.                 MACRO
  522.                 FCMPX
  523.                 MOVE.W        #FFEXT+FOCMP,-(SP)
  524.                 _FP68K
  525.                 ENDM
  526.  
  527.                 MACRO
  528.                 FCMPD
  529.                 MOVE.W        #FFDBL+FOCMP,-(SP)
  530.                 _FP68K
  531.                 ENDM
  532.  
  533.                 MACRO
  534.                 FCMPS
  535.                 MOVE.W        #FFSGL+FOCMP,-(SP)
  536.                 _FP68K
  537.                 ENDM
  538.  
  539.                 MACRO
  540.                 FCMPC
  541.                 MOVE.W        #FFCOMP+FOCMP,-(SP)
  542.                 _FP68K
  543.                 ENDM
  544.  
  545.                 MACRO
  546.                 FCMPI
  547.                 MOVE.W        #FFINT+FOCMP,-(SP)
  548.                 _FP68K
  549.                 ENDM
  550.  
  551.                 MACRO
  552.                 FCMPL
  553.                 MOVE.W        #FFLNG+FOCMP,-(SP)
  554.                 _FP68K
  555.                 ENDM
  556.  
  557. ;———————————————————————————————————————————————————————————
  558. ; Compare, signaling invalid on unordered.
  559. ;———————————————————————————————————————————————————————————
  560.                 MACRO
  561.                 FCPXX
  562.                 MOVE.W        #FFEXT+FOCPX,-(SP)
  563.                 _FP68K
  564.                 ENDM
  565.  
  566.                 MACRO
  567.                 FCPXD
  568.                 MOVE.W        #FFDBL+FOCPX,-(SP)
  569.                 _FP68K
  570.                 ENDM
  571.  
  572.                 MACRO
  573.                 FCPXS
  574.                 MOVE.W        #FFSGL+FOCPX,-(SP)
  575.                 _FP68K
  576.                 ENDM
  577.  
  578.                 MACRO
  579.                 FCPXC
  580.                 MOVE.W        #FFCOMP+FOCPX,-(SP)
  581.                 _FP68K
  582.                 ENDM
  583.  
  584.                 MACRO
  585.                 FCPXI
  586.                 MOVE.W        #FFINT+FOCPX,-(SP)
  587.                 _FP68K
  588.                 ENDM
  589.  
  590.                 MACRO
  591.                 FCPXL
  592.                 MOVE.W        #FFLNG+FOCPX,-(SP)
  593.                 _FP68K
  594.                 ENDM
  595.  
  596. ;———————————————————————————————————————————————————————————
  597. ; The following defines a set of so-called floating
  598. ; branches. They presume that the appropriate compare
  599. ; operation, FCMPz or FCPXz, precedes.
  600. ;———————————————————————————————————————————————————————————
  601.                 MACRO
  602.                 FBEQL
  603.                 BEQ         &SYSLIST[1]
  604.                 ENDM
  605.  
  606.                 MACRO
  607.                 FBLTL
  608.                 BCS         &SYSLIST[1]
  609.                 ENDM
  610.  
  611.                 MACRO
  612.                 FBLEL
  613.                 BLS         &SYSLIST[1]
  614.                 ENDM
  615.  
  616.                 MACRO
  617.                 FBGTL
  618.                 BGT         &SYSLIST[1]
  619.                 ENDM
  620.  
  621.                 MACRO
  622.                 FBGEL
  623.                 BGE         &SYSLIST[1]
  624.                 ENDM
  625.  
  626.                 MACRO
  627.                 FBULTL
  628.                 BLT         &SYSLIST[1]
  629.                 ENDM
  630.  
  631.                 MACRO
  632.                 FBULEL
  633.                 BLE         &SYSLIST[1]
  634.                 ENDM
  635.  
  636.                 MACRO
  637.                 FBUGTL
  638.                 BHI         &SYSLIST[1]
  639.                 ENDM
  640.  
  641.                 MACRO
  642.                 FBUGEL
  643.                 BCC         &SYSLIST[1]
  644.                 ENDM
  645.  
  646.                 MACRO
  647.                 FBUL
  648.                 BVS         &SYSLIST[1]
  649.                 ENDM
  650.  
  651.                 MACRO
  652.                 FBOL
  653.                 BVC         &SYSLIST[1]
  654.                 ENDM
  655.  
  656.                 MACRO
  657.                 FBNEL
  658.                 BNE         &SYSLIST[1]
  659.                 ENDM
  660.  
  661.                 MACRO
  662.                 FBUEL
  663.                 BEQ         &SYSLIST[1]
  664.                 BVS         &SYSLIST[1]
  665.                 ENDM
  666.  
  667.                 MACRO
  668.                 FBLGL
  669.                 BCS         &SYSLIST[1]
  670.                 BGT         &SYSLIST[1]
  671.                 ENDM
  672.  
  673. ;———————————————————————————————————————————————————————————
  674. ; Short branch versions.
  675. ;———————————————————————————————————————————————————————————
  676.                 MACRO
  677.                 FBEQS
  678.                 BEQ.S        &SYSLIST[1]
  679.                 ENDM
  680.  
  681.                 MACRO
  682.                 FBLTS
  683.                 BCS.S        &SYSLIST[1]
  684.                 ENDM
  685.  
  686.                 MACRO
  687.                 FBLES
  688.                 BLS.S        &SYSLIST[1]
  689.                 ENDM
  690.  
  691.                 MACRO
  692.                 FBGTS
  693.                 BGT.S        &SYSLIST[1]
  694.                 ENDM
  695.  
  696.                 MACRO
  697.                 FBGES
  698.                 BGE.S        &SYSLIST[1]
  699.                 ENDM
  700.  
  701.                 MACRO
  702.                 FBULTS
  703.                 BLT.S        &SYSLIST[1]
  704.                 ENDM
  705.  
  706.                 MACRO
  707.                 FBULES
  708.                 BLE.S        &SYSLIST[1]
  709.                 ENDM
  710.  
  711.                 MACRO
  712.                 FBUGTS
  713.                 BHI.S        &SYSLIST[1]
  714.                 ENDM
  715.  
  716.                 MACRO
  717.                 FBUGES
  718.                 BCC.S        &SYSLIST[1]
  719.                 ENDM
  720.  
  721.                 MACRO
  722.                 FBUS
  723.                 BVS.S        &SYSLIST[1]
  724.                 ENDM
  725.  
  726.                 MACRO
  727.                 FBOS
  728.                 BVC.S        &SYSLIST[1]
  729.                 ENDM
  730.  
  731.                 MACRO
  732.                 FBNES
  733.                 BNE.S        &SYSLIST[1]
  734.                 ENDM
  735.  
  736.                 MACRO
  737.                 FBUES
  738.                 BEQ.S        &SYSLIST[1]
  739.                 BVS.S        &SYSLIST[1]
  740.                 ENDM
  741.  
  742.                 MACRO
  743.                 FBLGS
  744.                 BCS.S        &SYSLIST[1]
  745.                 BGT.S        &SYSLIST[1]
  746.                 ENDM
  747.  
  748. ;———————————————————————————————————————————————————————————
  749. ; Class and sign inquiries.
  750. ;———————————————————————————————————————————————————————————
  751. FCSNAN            EQU         1                        ; signaling NAN
  752. FCQNAN            EQU         2                        ; quiet NAN
  753. FCINF            EQU         3                        ; infinity
  754. FCZERO            EQU         4                        ; zero
  755. FCNORM            EQU         5                        ; normal number
  756. FCDENORM        EQU         6                        ; denormal number
  757.  
  758.                 MACRO
  759.                 FCLASSS
  760.                 MOVE.W        #FFSGL+FOCLASS,-(SP)
  761.                 _FP68K
  762.                 ENDM
  763.  
  764.                 MACRO
  765.                 FCLASSD
  766.                 MOVE.W        #FFDBL+FOCLASS,-(SP)
  767.                 _FP68K
  768.                 ENDM
  769.  
  770.                 MACRO
  771.                 FCLASSX
  772.                 MOVE.W        #FFEXT+FOCLASS,-(SP)
  773.                 _FP68K
  774.                 ENDM
  775.  
  776. ;———————————————————————————————————————————————————————————
  777. ; Bit indexes for bytes of floating point environment word.
  778. ;———————————————————————————————————————————————————————————
  779. FBINVALID        EQU         0                        ; invalid operation
  780. FBUFLOW         EQU         1                        ; underflow
  781. FBOFLOW         EQU         2                        ; overflow
  782. FBDIVZER        EQU         3                        ; division by zero
  783. FBINEXACT        EQU         4                        ; inexact
  784. FBRNDLO         EQU         5                        ; low bit of rounding mode
  785. FBRNDHI         EQU         6                        ; high bit of rounding mode
  786. FBLSTRND        EQU         7                        ; last round result bit
  787. FBDBL            EQU         5                        ; double precision control
  788. FBSGL            EQU         6                        ; single precision control
  789.  
  790. ;———————————————————————————————————————————————————————————
  791. ; Get and set environment.
  792. ;———————————————————————————————————————————————————————————
  793.                 MACRO
  794.                 FGETENV
  795.                 MOVE.W        #FOGETENV,-(SP)
  796.                 _FP68K
  797.                 ENDM
  798.  
  799.                 MACRO
  800.                 FSETENV
  801.                 MOVE.W        #FOSETENV,-(SP)
  802.                 _FP68K
  803.                 ENDM
  804.  
  805. ;———————————————————————————————————————————————————————————
  806. ; Test and set exception.
  807. ;———————————————————————————————————————————————————————————
  808.                 MACRO
  809.                 FTESTXCP
  810.                 MOVE.W        #FOTESTXCP,-(SP)
  811.                 _FP68K
  812.                 ENDM
  813.  
  814.                 MACRO
  815.                 FSETXCP
  816.                 MOVE.W        #FOSETXCP,-(SP)
  817.                 _FP68K
  818.                 ENDM
  819.  
  820. ;———————————————————————————————————————————————————————————
  821. ; Procedure entry and exit.
  822. ;———————————————————————————————————————————————————————————
  823.                 MACRO
  824.                 FPROCENTRY
  825.                 MOVE.W        #FOPROCENTRY,-(SP)
  826.                 _FP68K
  827.                 ENDM
  828.  
  829.                 MACRO
  830.                 FPROCEXIT
  831.                 MOVE.W        #FOPROCEXIT,-(SP)
  832.                 _FP68K
  833.                 ENDM
  834.  
  835. ;———————————————————————————————————————————————————————————
  836. ; Get and set halt vector.
  837. ;———————————————————————————————————————————————————————————
  838.                 MACRO
  839.                 FGETHV
  840.                 MOVE.W        #FOGETHV,-(SP)
  841.                 _FP68K
  842.                 ENDM
  843.  
  844.                 MACRO
  845.                 FSETHV
  846.                 MOVE.W        #FOSETHV,-(SP)
  847.                 _FP68K
  848.                 ENDM
  849.  
  850.  
  851.  
  852. ;———————————————————————————————————————————————————————————
  853. ; Elementary function operation code masks.
  854. ;———————————————————————————————————————————————————————————
  855. FOLNX            EQU         $0000                    ; base-e log
  856. FOLOG2X         EQU         $0002                    ; base-2 log
  857. FOLN1X            EQU         $0004                    ; ln (1 + x)
  858. FOLOG21X        EQU         $0006                    ; log2 (1 + x)
  859. FOEXPX            EQU         $0008                    ; base-e exponential
  860. FOEXP2X         EQU         $000A                    ; base-2 exponential
  861. FOEXP1X         EQU         $000C                    ; exp (x) - 1
  862. FOEXP21X        EQU         $000E                    ; exp2 (x) - 1
  863. FOXPWRI         EQU         $8010                    ; integer exponentiation
  864. FOXPWRY         EQU         $8012                    ; general exponentiation
  865. FOCOMPOUND        EQU         $C014                    ; compound
  866. FOANNUITY        EQU         $C016                    ; annuity
  867. FOSINX            EQU         $0018                    ; sine
  868. FOCOSX            EQU         $001A                    ; cosine
  869. FOTANX            EQU         $001C                    ; tangent
  870. FOATANX         EQU         $001E                    ; arctangent
  871. FORANDX         EQU         $0020                    ; random
  872.  
  873. ;———————————————————————————————————————————————————————————
  874. ; Elementary functions.
  875. ;———————————————————————————————————————————————————————————
  876.                 MACRO
  877.                 FLNX                                ; base-e log
  878.                 MOVE.W        #FOLNX,-(SP)
  879.                 _ELEMS68K
  880.                 ENDM
  881.  
  882.                 MACRO
  883.                 FLOG2X                                ; base-2 log
  884.                 MOVE.W        #FOLOG2X,-(SP)
  885.                 _ELEMS68K
  886.                 ENDM
  887.  
  888.                 MACRO
  889.                 FLN1X                                ; ln (1 + x)
  890.                 MOVE.W        #FOLN1X,-(SP)
  891.                 _ELEMS68K
  892.                 ENDM
  893.  
  894.                 MACRO
  895.                 FLOG21X                             ; log2 (1 + x)
  896.                 MOVE.W        #FOLOG21X,-(SP)
  897.                 _ELEMS68K
  898.                 ENDM
  899.  
  900.                 MACRO
  901.                 FEXPX                                ; base-e exponential
  902.                 MOVE.W        #FOEXPX,-(SP)
  903.                 _ELEMS68K
  904.                 ENDM
  905.  
  906.                 MACRO
  907.                 FEXP2X                                ; base-2 exponential
  908.                 MOVE.W        #FOEXP2X,-(SP)
  909.                 _ELEMS68K
  910.                 ENDM
  911.  
  912.                 MACRO
  913.                 FEXP1X                                ; exp (x) - 1
  914.                 MOVE.W        #FOEXP1X,-(SP)
  915.                 _ELEMS68K
  916.                 ENDM
  917.  
  918.                 MACRO
  919.                 FEXP21X                             ; exp2 (x) - 1
  920.                 MOVE.W        #FOEXP21X,-(SP)
  921.                 _ELEMS68K
  922.                 ENDM
  923.  
  924.                 MACRO
  925.                 FXPWRI                                ; integer exponential
  926.                 MOVE.W        #FOXPWRI,-(SP)
  927.                 _ELEMS68K
  928.                 ENDM
  929.  
  930.                 MACRO
  931.                 FXPWRY                                ; general exponential
  932.                 MOVE.W        #FOXPWRY,-(SP)
  933.                 _ELEMS68K
  934.                 ENDM
  935.  
  936.                 MACRO
  937.                 FCOMPOUND                            ; compound
  938.                 MOVE.W        #FOCOMPOUND,-(SP)
  939.                 _ELEMS68K
  940.                 ENDM
  941.  
  942.                 MACRO
  943.                 FANNUITY                            ; annuity
  944.                 MOVE.W        #FOANNUITY,-(SP)
  945.                 _ELEMS68K
  946.                 ENDM
  947.  
  948.                 MACRO
  949.                 FSINX                                ; sine
  950.                 MOVE.W        #FOSINX,-(SP)
  951.                 _ELEMS68K
  952.                 ENDM
  953.  
  954.                 MACRO
  955.                 FCOSX                                ; cosine
  956.                 MOVE.W        #FOCOSX,-(SP)
  957.                 _ELEMS68K
  958.                 ENDM
  959.  
  960.                 MACRO
  961.                 FTANX                                ; tangent
  962.                 MOVE.W        #FOTANX,-(SP)
  963.                 _ELEMS68K
  964.                 ENDM
  965.  
  966.                 MACRO
  967.                 FATANX                                ; arctangent
  968.                 MOVE.W        #FOATANX,-(SP)
  969.                 _ELEMS68K
  970.                 ENDM
  971.  
  972.                 MACRO
  973.                 FRANDX                                ; random number generator
  974.                 MOVE.W        #FORANDX,-(SP)
  975.                 _ELEMS68K
  976.                 ENDM
  977.  
  978. ;———————————————————————————————————————————————————————————
  979. ; Scanner and formatter operation code masks
  980. ;———————————————————————————————————————————————————————————
  981.  
  982. FOPSTR2DEC        EQU         $0002                    ;Pascal string to decimal record
  983. FOCSTR2DEC        EQU         $0004                    ;C string to decimal record
  984. FODEC2STR        EQU         $0003                    ;decimal record to Pascal string
  985.  
  986. ;———————————————————————————————————————————————————————————
  987. ; Scanner and formatter functions
  988. ;———————————————————————————————————————————————————————————
  989.  
  990. ;Pascal string to decimal record
  991.  
  992.                 MACRO
  993.                 FPSTR2DEC
  994.                 MOVE.W        #FOPSTR2DEC, -(SP)
  995.                 _DecStr68K
  996.                 ENDM
  997.  
  998. ;C string to decimal record
  999.  
  1000.                 MACRO
  1001.                 FCSTR2DEC
  1002.                 MOVE.W        #FOCSTR2DEC, -(SP)
  1003.                 _DecStr68K
  1004.                 ENDM
  1005.  
  1006. ;decimal record to Pascal string
  1007.  
  1008.                 MACRO
  1009.                 FDEC2STR
  1010.                 MOVE.W        #FODEC2STR, -(SP)
  1011.                 _DecStr68K
  1012.                 ENDM
  1013.  
  1014.  
  1015.  
  1016. ;———————————————————————————————————————————————————————————
  1017. ; NaN codes.
  1018. ;———————————————————————————————————————————————————————————
  1019. NANSQRT         EQU         1                        ; Invalid square root such as sqrt(-1).
  1020. NANADD            EQU         2                        ; Invalid addition such as +INF - +INF.
  1021. NANDIV            EQU         4                        ; Invalid division such as 0/0.
  1022. NANMUL            EQU         8                        ; Invalid multiply such as 0 * INF.
  1023. NANREM            EQU         9                        ; Invalid remainder or mod such as x REM 0.
  1024. NANASCBIN        EQU         17                        ; Attempt to convert invalid ASCII string.
  1025. NANCOMP         EQU         20                        ; Result of converting comp NaN to floating.
  1026. NANZERO         EQU         21                        ; Attempt to create a NaN with a zero code.
  1027. NANTRIG         EQU         33                        ; Invalid argument to trig routine.
  1028. NANINVTRIG        EQU         34                        ; Invalid argument to inverse trig routine.
  1029. NANLOG            EQU         36                        ; Invalid argument to log routine.
  1030. NANPOWER        EQU         37                        ; Invalid argument to x^i or x^y routine.
  1031. NANFINAN        EQU         38                        ; Invalid argument to financial function.
  1032. NANINIT         EQU         255                     ; Uninitialized storage.
  1033.